package servicioTraductores.traductoresExternos;

import DTOs.IdiomaDTO;
import com.google.api.translate.Language;
import com.google.api.translate.Translate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import servicioTraductores.Servicio;

/**
 * Clase adaptada de la API code.google.com/p/google-api-translate-java/
 * @author overflow012
 */
public class GoogleTraductor extends Servicio {

    public GoogleTraductor() {
        id = "Google";
    }

    /**
     * Metodo encargado de traducir un texto desde su idioma original al idioma deseado usando la API de Google
     * @param textoOrigen -Texto a traducir
     * @param idIdiomaOrigen -Sigla del idioma del que parte la traducción
     * @param idIdiomaDestino -Sigla del idioma al que se desea la traducción
     * @return Texto traducido por el webservice
     * @throws Exception
     */
    public String traducir(String textoOrigen, String idIdiomaOrigen, String idIdiomaDestino) throws Exception {
        Translate.setHttpReferrer("http://ivanebel.com");
        Language idiomaOrigen = Language.fromString(idIdiomaOrigen);
        Language idiomaDestino = Language.fromString(idIdiomaDestino);

        return Translate.execute(textoOrigen, idiomaOrigen, idiomaDestino);
    }

    /**
     * Metodo que carga en un Map la lista de idiomas disponibles para el webservice.
     * Dicho Map tiene como clave la sigla del idioma y como valor el objeto Idioma
     * @return Mapa de idiomas soportados por la API de Google
     */
    public HashMap<String, IdiomaDTO> getIdiomas() {
        ArrayList idiomas = new ArrayList();
        idiomas.add(new IdiomaDTO("es", "Español"));
        idiomas.add(new IdiomaDTO("de", "Deutsch"));
        idiomas.add(new IdiomaDTO("en", "English"));
        idiomas.add(new IdiomaDTO("fr", "Français"));
        idiomas.add(new IdiomaDTO("it", "Italiano"));
        idiomas.add(new IdiomaDTO("pt", "Português"));
        idiomas.add(new IdiomaDTO("ru", "Русский"));
        idiomas.add(new IdiomaDTO("el", "Ελληνικά"));
        idiomas.add(new IdiomaDTO("ar", "العربية"));
        idiomas.add(new IdiomaDTO("hi", "हिन्दी"));
        idiomas.add(new IdiomaDTO("iw", "עברית"));
        idiomas.add(new IdiomaDTO("ko", "한국어"));
        idiomas.add(new IdiomaDTO("pl", "Polska"));
        idiomas.add(new IdiomaDTO("ro", "Roman"));
        idiomas.add(new IdiomaDTO("tr", "Türk"));
        idiomas.add(new IdiomaDTO("ja", "日本"));

        HashMap<String, IdiomaDTO> map = new HashMap<String, IdiomaDTO>();
        Iterator<IdiomaDTO> it = idiomas.iterator();
        while (it.hasNext()) {
            IdiomaDTO unIdioma = it.next();
            String valueIdioma = unIdioma.getIdioma();
            map.put(valueIdioma, unIdioma);
        }
        return map;
    }
}
